
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.Common;
using Gman.Entity.Entities;
using Gman.Entity.Interfaces;
using Gman.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;


namespace Gman.Data
{
  //-------------------------------------------------------------------
  //Archivo     : UsuariosDA.cs
  //Proyecto    : Gman
  //Creacion    : BIS(NombreDesarrollador) 20130226
  //Modificacion: 
  //Descripcion : Clase para capa de datos.
  //-------------------------------------------------------------------
  public class UsuariosDA : IUsuarios
  {

  Database db = DatabaseFactory.CreateDatabase();

  //-----------------------------------------------------------------------------------------------
  //Nombre: Listar
  //Objetivo: Retorna una lista de registros de tipo UsuariosBE  
  //Creacion    : TISI(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public IList<UsuariosBE> Listar(UsuariosBE oItem)
  {
    IList<UsuariosBE> lista = new List<UsuariosBE>();			
    try
    {				
      DbCommand cmd = db.GetStoredProcCommand("SP_ListarUsuarios");

      using (IDataReader oR = db.ExecuteReader(cmd))
      {
        lista = MakeUniqueDatos(oR);
      }
      
    }catch (Exception ex){
      throw new Exception("UsuariosDA.Listar()", ex);
    }
    finally
    {
    }
    return lista;
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Obtener
  //Objetivo: Retorna un objeto de Tipo UsuariosBE  
  //Creacion    : BIS(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public UsuariosBE Obtener(UsuariosBE oItem)
  {
    UsuariosBE itemResult = null;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_ObtenerUsuarios",oItem.IDUsuario,"");

      using (IDataReader oR = db.ExecuteReader(cmd))
      {
        while (oR.Read())
        {
          itemResult = MakeDatosMapeados(oR);
        }
      }
      return itemResult;
    }
    catch (Exception ex)
    {
      throw new Exception("UsuariosDA.Obtener()", ex);                  
    }
    finally
    {
    }
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Registrar
  //Objetivo: Almacena el registro de un objeto de tipo UsuariosBE  
  //Creacion    : TISI(NombreDesarrollador) 20130226  
  //----------------------------------------------------------------------------------------------
  public int Registrar(UsuariosBE oItem)
  { 
    int resultado = 0;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_RegistrarUsuarios");						
      db.AddInParameter(cmd, "@IDUsuario", DbType.Int64 , oItem.IDUsuario);
      db.AddInParameter(cmd, "@NomUsu", DbType.String, oItem.NomUsu);
      db.AddInParameter(cmd, "@ApeUsu", DbType.String, oItem.ApeUsu);
      db.AddInParameter(cmd, "@SexoUsu", DbType.Int32 , oItem.SexoUsu);
      db.AddInParameter(cmd, "@DniUsu", DbType.String, oItem.DniUsu);
      db.AddInParameter(cmd, "@FecNaci", DbType.DateTime, oItem.FecNaci);
      db.AddInParameter(cmd, "@TipoUsu", DbType.String, oItem.TipoUsu);
      db.AddInParameter(cmd, "@EmailPers", DbType.String, oItem.EmailPers);
      db.AddInParameter(cmd, "@CargoUsu", DbType.String, oItem.CargoUsu);
      db.AddInParameter(cmd, "@AreaUsu", DbType.String, oItem.AreaUsu);
      db.AddInParameter(cmd, "@EmailLabo", DbType.String, oItem.EmailLabo);
      db.AddInParameter(cmd, "@DirecUsu", DbType.String, oItem.DirecUsu);
      db.AddInParameter(cmd, "@TermUsu", DbType.String, oItem.TermUsu);
      db.AddInParameter(cmd, "@TlfUsu", DbType.String, oItem.TlfUsu);
      db.AddInParameter(cmd, "@AnexUsu", DbType.String, oItem.AnexUsu);
      db.AddInParameter(cmd, "@CeluUsu", DbType.String, oItem.CeluUsu);
      db.AddInParameter(cmd, "@ClaseUsu", DbType.String, oItem.ClaseUsu);
      db.AddInParameter(cmd, "@EstadoUsu", DbType.Int32 , oItem.EstadoUsu);
      db.AddInParameter(cmd, "@UsuReg", DbType.String, oItem.UsuReg);
      db.AddInParameter(cmd, "@FecReg", DbType.DateTime, oItem.FecReg);
      db.AddInParameter(cmd, "@TermCnxReg", DbType.String, oItem.TermCnxReg);
      db.AddInParameter(cmd, "@UsuMod", DbType.String, oItem.UsuMod);
      db.AddInParameter(cmd, "@fecMod", DbType.DateTime, oItem.fecMod);
      db.AddInParameter(cmd, "@TermCnxMod", DbType.String, oItem.TermCnxMod);
      db.AddInParameter(cmd, "@IDEmp", DbType.Int32 , oItem.IDEmp);
      
      resultado = db.ExecuteNonQuery(cmd);      

    }
    catch (Exception ex)
    {
      throw new Exception("UsuariosDA.Registrar()", ex);
    }
    finally
    {

    }
    return resultado;
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Actualizar
  //Objetivo: Actualiza el registro de un objeto de tipo UsuariosBE 
  //Creacion    : TISI(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public int Actualizar(UsuariosBE oItem)
  {
    int resultado = 0;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_ActualizarUsuarios");						
      db.AddInParameter(cmd, "@IDUsuario", DbType.Int64 , oItem.IDUsuario);
      db.AddInParameter(cmd, "@NomUsu", DbType.String, oItem.NomUsu);
      db.AddInParameter(cmd, "@ApeUsu", DbType.String, oItem.ApeUsu);
      db.AddInParameter(cmd, "@SexoUsu", DbType.Int32 , oItem.SexoUsu);
      db.AddInParameter(cmd, "@DniUsu", DbType.String, oItem.DniUsu);
      db.AddInParameter(cmd, "@FecNaci", DbType.DateTime, oItem.FecNaci);
      db.AddInParameter(cmd, "@TipoUsu", DbType.String, oItem.TipoUsu);
      db.AddInParameter(cmd, "@EmailPers", DbType.String, oItem.EmailPers);
      db.AddInParameter(cmd, "@CargoUsu", DbType.String, oItem.CargoUsu);
      db.AddInParameter(cmd, "@AreaUsu", DbType.String, oItem.AreaUsu);
      db.AddInParameter(cmd, "@EmailLabo", DbType.String, oItem.EmailLabo);
      db.AddInParameter(cmd, "@DirecUsu", DbType.String, oItem.DirecUsu);
      db.AddInParameter(cmd, "@TermUsu", DbType.String, oItem.TermUsu);
      db.AddInParameter(cmd, "@TlfUsu", DbType.String, oItem.TlfUsu);
      db.AddInParameter(cmd, "@AnexUsu", DbType.String, oItem.AnexUsu);
      db.AddInParameter(cmd, "@CeluUsu", DbType.String, oItem.CeluUsu);
      db.AddInParameter(cmd, "@ClaseUsu", DbType.String, oItem.ClaseUsu);
      db.AddInParameter(cmd, "@EstadoUsu", DbType.Int32 , oItem.EstadoUsu);
      db.AddInParameter(cmd, "@UsuReg", DbType.String, oItem.UsuReg);
      db.AddInParameter(cmd, "@FecReg", DbType.DateTime, oItem.FecReg);
      db.AddInParameter(cmd, "@TermCnxReg", DbType.String, oItem.TermCnxReg);
      db.AddInParameter(cmd, "@UsuMod", DbType.String, oItem.UsuMod);
      db.AddInParameter(cmd, "@fecMod", DbType.DateTime, oItem.fecMod);
      db.AddInParameter(cmd, "@TermCnxMod", DbType.String, oItem.TermCnxMod);
      db.AddInParameter(cmd, "@IDEmp", DbType.Int32 , oItem.IDEmp);
      
      resultado = db.ExecuteNonQuery(cmd);

    }
    catch (Exception ex)
    {
      throw new Exception("UsuariosDA.Actualizar()", ex);
    }
    finally
    {

    }
    return resultado;
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Eliminar
  //Objetivo: Elimina el registro de un objeto de tipo UsuariosBE  
  //Creacion    : BIS(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public int Eliminar(UsuariosBE oItem)
  {
    int resultado = 0;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_EliminarUsuarios");						
      db.AddInParameter(cmd, "@IDUsuario", DbType.Int64 , oItem.IDUsuario);
      

      resultado = db.ExecuteNonQuery(cmd);      

    }
    catch (Exception ex)
    {
      throw new Exception("UsuariosDA.Eliminar()", ex);
  }
  finally
  {

  }
  return resultado;
  }  

  private IList<UsuariosBE> MakeUniqueDatos(IDataReader oR)
  {
    IList<UsuariosBE> list = new List<UsuariosBE>();

    while (oR.Read())
      list.Add(MakeDatosMapeados(oR));

    return list;
  }

  private UsuariosBE MakeDatosMapeados(IDataReader oR)
  {
    var itemResult = new UsuariosBE();
    
      itemResult.IDUsuario= oR["IDUsuario"].ToInt64();
      itemResult.NomUsu= oR["NomUsu"].ToString();
      itemResult.ApeUsu= oR["ApeUsu"].ToString();
      itemResult.SexoUsu= oR["SexoUsu"].ToInt32();
      itemResult.DniUsu= oR["DniUsu"].ToString();
      itemResult.FecNaci= oR["FecNaci"].ToDateTime();
      itemResult.TipoUsu= oR["TipoUsu"].ToString();
      itemResult.EmailPers= oR["EmailPers"].ToString();
      itemResult.CargoUsu= oR["CargoUsu"].ToString();
      itemResult.AreaUsu= oR["AreaUsu"].ToString();
      itemResult.EmailLabo= oR["EmailLabo"].ToString();
      itemResult.DirecUsu= oR["DirecUsu"].ToString();
      itemResult.TermUsu= oR["TermUsu"].ToString();
      itemResult.TlfUsu= oR["TlfUsu"].ToString();
      itemResult.AnexUsu= oR["AnexUsu"].ToString();
      itemResult.CeluUsu= oR["CeluUsu"].ToString();
      itemResult.ClaseUsu= oR["ClaseUsu"].ToString();
      itemResult.EstadoUsu= oR["EstadoUsu"].ToInt32();
      itemResult.UsuReg= oR["UsuReg"].ToString();
      itemResult.FecReg= oR["FecReg"].ToDateTime();
      itemResult.TermCnxReg= oR["TermCnxReg"].ToString();
      itemResult.UsuMod= oR["UsuMod"].ToString();
      itemResult.fecMod= oR["fecMod"].ToDateTime();
      itemResult.TermCnxMod= oR["TermCnxMod"].ToString();
      itemResult.IDEmp= oR["IDEmp"].ToInt32();
  
    return itemResult;
  }
 }
}
